C++ স্ট্যান্ডার্ড লাইব্রেরিতে বিভিন্ন ধরনের exceptions রয়েছে যা প্রোগ্রামিংয়ের সময় ত্রুটি (error) মোকাবেলা করতে ব্যবহৃত হয়। এই exceptions-গুলি std::exception
এর মাধ্যমে প্রাপ্ত হয় এবং তাদের মধ্যে std::runtime_error
, std::logic_error
অন্যতম। প্রতিটি exception ক্লাস একটি নির্দিষ্ট ধরনের ত্রুটি নির্দেশ করে এবং সঠিকভাবে ব্যবহার করা হলে প্রোগ্রাম আরও নির্ভরযোগ্য এবং নিরাপদ হয়।
std::exception
std::exception
হল C++ স্ট্যান্ডার্ড লাইব্রেরির সবচেয়ে সাধারণ exception ক্লাস, এবং এটি সব ধরনের exception এর মূল ক্লাস। এর মাধ্যমে আমরা ত্রুটি সম্পর্কিত বিস্তারিত তথ্য পেতে পারি। std::exception
ক্লাসে what()
নামক একটি মেথড রয়েছে, যা ত্রুটির বর্ণনা সরবরাহ করে।
#include <iostream>
#include <exception>
int main() {
try {
throw std::exception(); // সাধারণ exception ফেলে দেওয়া
} catch (const std::exception& e) {
std::cout << "Caught exception: " << e.what() << std::endl;
}
return 0;
}
আউটপুট:
Caught exception: std::exception
এখানে, std::exception
ত্রুটির বর্ণনা প্রদান করেছে। তবে এটি একটি সাধারণ ত্রুটি, তাই ত্রুটির আরও নির্দিষ্ট কারণ জানতে std::runtime_error
বা std::logic_error
ব্যবহার করা হয়।
std::runtime_error
std::runtime_error
হল std::exception
ক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত একটি বিশেষ ক্লাস যা রানটাইম (execution time) ত্রুটির জন্য ব্যবহৃত হয়। এই ত্রুটির মধ্যে এমন ধরনের ত্রুটি থাকে যা প্রোগ্রামের চলমান অবস্থায় ঘটতে পারে, যেমন অবৈধ ইনপুট, ফাইল খোলার সময় ত্রুটি, বা ভুল হিসাব।
std::runtime_error
-এর কনস্ট্রাক্টরে একটি বর্ণনা পাস করা যায় যা what()
ফাংশনের মাধ্যমে ফেরত দেওয়া হয়।
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::runtime_error("Something went wrong during runtime!"); // runtime_error ফেলা
} catch (const std::runtime_error& e) {
std::cout << "Caught runtime_error: " << e.what() << std::endl;
}
return 0;
}
আউটপুট:
Caught runtime_error: Something went wrong during runtime!
এখানে std::runtime_error
ত্রুটির সাথে একটি কাস্টম মেসেজ প্রদান করা হয়েছে, যা what()
মেথডের মাধ্যমে প্রদর্শিত হয়েছে।
std::logic_error
std::logic_error
একটি exception ক্লাস যা লজিক্যাল ত্রুটি নির্দেশ করে। এটি এমন ত্রুটি যা সাধারণত অকল্পনীয় বা অযৌক্তিক পরিস্থিতি সৃষ্টি হয়, যেমন ভুল ক্যালকুলেশন বা অকার্যকর স্টেটমেন্ট।
যখন এমন কোনো ত্রুটি ঘটে যা কোডের লজিকের কারণে বা ভুল ডেটা ব্যবহারের কারণে হয়ে থাকে, তখন std::logic_error
ব্যবহার করা হয়। এর মধ্যে অনেক সাবক্লাসও রয়েছে, যেমন std::invalid_argument
, std::out_of_range
, std::domain_error
ইত্যাদি।
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::logic_error("Logic error encountered!"); // logic_error ফেলা
} catch (const std::logic_error& e) {
std::cout << "Caught logic_error: " << e.what() << std::endl;
}
return 0;
}
আউটপুট:
Caught logic_error: Logic error encountered!
এখানে, std::logic_error
একটি ভুলের কারণে ফেলা হয়েছে, যা লজিক্যাল ত্রুটি হিসেবে চিহ্নিত করা হয়েছে।
C++ স্ট্যান্ডার্ড লাইব্রেরিতে std::exception
এর অনেক অন্যান্য সাবক্লাস রয়েছে যা নির্দিষ্ট ধরনের ত্রুটি পরিচালনা করতে ব্যবহৃত হয়:
std::invalid_argument
: অকার্যকর আর্গুমেন্ট (যেমন ফাংশনে ভুল ইনপুট দেওয়া)।std::out_of_range
: কোনো অ্যারে বা কনটেইনারের বাইরে যাওয়া।std::overflow_error
: অতিরিক্ত মান গণনা (overflow)।std::underflow_error
: কম মান গণনা (underflow)।std::bad_alloc
: মেমরি অ্যালোকেশন সমস্যা (যখন নতুন মেমরি অ্যাক্সেস করা সম্ভব হয় না)।std::domain_error
: একটি অকার্যকর ডোমেইন হিসেবে ইনপুট দেয়া (যেমন, নেগেটিভ নাম্বারের স্কয়ার রুট নেওয়া)।#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::invalid_argument("Invalid argument provided!"); // invalid_argument ফেলা
} catch (const std::invalid_argument& e) {
std::cout << "Caught invalid_argument: " << e.what() << std::endl;
}
try {
throw std::out_of_range("Index is out of range!"); // out_of_range ফেলা
} catch (const std::out_of_range& e) {
std::cout << "Caught out_of_range: " << e.what() << std::endl;
}
return 0;
}
আউটপুট:
Caught invalid_argument: Invalid argument provided!
Caught out_of_range: Index is out of range!
throw
কিওয়ার্ডের মাধ্যমে একটি exception উত্থাপন করা হয়।try
ব্লকে রক্ষা করা কোডের মধ্যে exception হলে, সেই exception কে catch
ব্লক দ্বারা ধরা হয় এবং সংশ্লিষ্ট সমাধান নেওয়া হয়।what()
Method: what()
মেথডটি exception সম্পর্কিত ত্রুটির বর্ণনা প্রদান করে।std::exception
: সব ধরনের exceptions এর মূল ক্লাস। সাধারণভাবে ব্যবহৃত হয়, এবং এতে একটি what()
মেথড রয়েছে যা ত্রুটির বর্ণনা দেয়।std::runtime_error
: রানটাইম ত্রুটি নির্দেশ করে এবং এটির কনস্ট্রাক্টরে একটি ত্রুটির বর্ণনা যুক্ত করা হয়।std::logic_error
: লজিক্যাল ত্রুটি নির্দেশ করে, যখন কোডের অযৌক্তিক আচরণ বা ভুল যুক্তি ঘটে।স্ট্যান্ডার্ড exceptions গুলি C++-এ ত্রুটির সঠিক ব্যাখ্যা এবং সমাধান খুঁজে বের করার জন্য একটি শক্তিশালী হাতিয়ার।
Read more